package com.atguigu.stack;

import java.util.ArrayList;
import java.util.List;

/**
 * @author durant
 * @create 2021-11-13 8:34
 */
public class PolandNotation {
    public static void main(String[] args) {
        String suffixExpression = "";

        // 思路
        // 1.先把表达式放到arraylist中
        // 2.再结合栈将arraylist中的数进行运算
        List<String> listString = getListString(suffixExpression);
        ArrayStack2 numStack = new ArrayStack2(listString.size());
        for (int i = 0; i < listString.size()   ; i++) {
            if (numStack.isOper(listString.get(i).charAt(0))) {
                // 如果遇到符号，将数栈弹出两个数，进行计算，再放到数栈中
                int pop1 = numStack.pop();//先弹出的数再后面
                int  pop2= numStack.pop();
                int call = numStack.call(pop1, pop2, listString.get(i).charAt(0));
                numStack.push(call);
            } else {
                numStack.push(listString.get(i).charAt(0) - 48);//字符对应的数字是需要减48的
            }
        }
        int result = numStack.pop();
        System.out.println("计算公式是："+suffixExpression+",结果是："+result);
    }


    // 将一个逆波兰表达式，依次传入arraylist中
    public static List<String> getListString(String suffixExpression) {
        String[] split = suffixExpression.split(" ");
        List<String> list = new ArrayList<>();
        for (String ele : split) {
            list.add(ele);
        }
        return list;
    }

}
